home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 42 / Amiga Format AFCD42 (Issue 126, Aug 1999).iso / -serious- / programming / other / wild / developer / coderhelp / modulebase.library.s < prev   
Text File  |  1999-05-25  |  5KB  |  191 lines

  1.  
  2. ; To have a working module:
  3. ; Search MODB_ and replace with ??_ (?? is the prefix of your moduledata struct)
  4. ; Search MODULETYPE and replace with the type (Display,Broker,Draw,Light,..)
  5. ; Change the LIBRARY name and BASE (w?m_SIZEOF, even if NOW are all the same)
  6. ; Add some more specific includes
  7. ; Add the tags you support at the list (find Supported)
  8. ; Set correctly the TYPES (A-H) :
  9.  
  10. ; NB: I default provide the TrackRefresh system, but you can eliminate if you want.
  11.  
  12. ; REMEMBER TO ADD THE SPECIFIC FUNCS EVEN IN THE LIST BELOW ! (*!*)
  13.  
  14.         include    WildInc.gs
  15.         include    Wild/wild.i
  16.         include PyperLibMaker.i
  17.         include    PyperMacro.i
  18.         include    Wild/modules_macros.i
  19.  
  20. MODTYPES1    EQU    TYPEA_FULLCOMPATIBLE<<24+TYPEB_FULLCOMPATIBLE<<16+TYPEC_FULLCOMPATIBLE<<8+TYPED_FULLCOMPATIBLE
  21. MODTYPES2    EQU    TYPEE_FULLCOMPATIBLE<<24+TYPEF_FULLCOMPATIBLE<<16+TYPEG_FULLCOMPATIBLE<<8+TYPEH_FULLCOMPATIBLE
  22.  
  23.         Lib    ModuleBase,1,0,18.7.1998,wdm_SIZEOF
  24.         Lib    FUNCTIONS
  25.         Lib    OpenLib
  26.         Lib    CloseLib
  27.         Lib    ExpugneLib
  28.         Lib    ExtFuncLib
  29.  
  30.         Lib    SetModuleTags
  31.         Lib    GetModuleTags
  32.         Lib    SetUpModule
  33.         Lib    CloseModule
  34.         Lib    RefreshModule
  35.                         ;HERE!          (*!*)
  36.         Lib    CODE
  37.  
  38.         Lib    Init
  39.         exg    a0,d0
  40.         move.l    d0,LIB_SIZE(a0)
  41.         move.l    #MODTYPES1,wm_Types(a0)
  42.         move.l    #MODTYPES2,wm_Types+4(a0)
  43.         clr.w    wm_CNT(a0)
  44.         
  45.         ; Here you can do the First init !
  46.         ; Take care !!! Preserve A0(LibBase) and D0(Don'tKnow)
  47.         
  48.         exg    a0,d0
  49.         rts
  50.  
  51.         Lib    OpenLib
  52.         add.w    #1,LIB_OPENCNT(a6)
  53.         bset    #LIBB_DELEXP,LIB_FLAGS(a6)    ; MODULES DEFAULT ARE WANTED TO FREE THEIR MEMORY WHEN CLOSED SO THE EXPUGNE FLAG IS SET ,USUALLY. CLEAR IT ONLY IF REALLY NEEDED.
  54.         
  55.         ; Here you can do any init you want, but take care: EVERY time the
  56.         ; lib is opened, this init is done. The first time-only init is
  57.         ; in the Init routine
  58.         
  59.         move.l    a6,d0
  60.         rts
  61.  
  62.         Lib    CloseLib
  63.         subq.w    #1,LIB_OPENCNT(a6)
  64.         bne.b    ExtFuncLib
  65.         btst    #LIBB_DELEXP,LIB_FLAGS(a6)
  66.         beq.b    ExtFuncLib
  67.  
  68.         Lib    ExpugneLib
  69.         movem.l    d2/a5/a6,-(sp)
  70.         tst.w    LIB_OPENCNT(a6) 
  71.         bne.b    .still_openned
  72.  
  73.         ;On this place free all resources which has been
  74.         ;allocated in init part. a6 contain library base.
  75.  
  76.         move.l    LIB_SIZE(a6),d2
  77.         move.l    a6,a5
  78.         move.l    4.w,a6
  79.         move.l    a5,a1
  80.         jsr    _LVORemove(a6)
  81.         move.l    a5,a1
  82.         moveq    #0,d0
  83.         move.w    LIB_NEGSIZE(a5),d0
  84.         sub.w    d0,a1
  85.         add.w    LIB_POSSIZE(a5),d0
  86.         jsr    _LVOFreeMem(a6)
  87.         move.l    d2,d0
  88.         movem.l    (sp)+,d2/a5/a6
  89.         rts
  90. .still_openned
  91.         Lib    ExtFuncLib
  92.         moveq    #0,d0
  93.         rts
  94.  
  95. Supported    dc.l    WIDI_Screen,0    ; Tag,Default
  96. SupportedEnd    dc.l    TAG_DONE    ; Taglist of supported tags.
  97.  
  98.         include    include/wild/modules_refreshtrack.i
  99.  
  100.         Lib    SetModuleTags    ; a0:app,a1:Tags
  101.         movem.l    a2-a6,-(a7)
  102.         movea.l    a0,a5
  103.         movea.l    wap_EngineData+we_MODULETYPE(a5),a4    ; a4:moddata
  104.         movea.l    a1,a3
  105.         lea.l    MODB_TrackRefresh(a4),a2
  106.         movea.l    wm_WildBase(a6),a6
  107.         movea.l    wi_UtilityBase(a6),a6
  108.         bsr    TrackRefresh
  109.         or.l    #WAF_RefreshEngine,wap_Flags(a5)
  110.         
  111.         ; DO NOT GET ANY TAG VALUE HERE from wt_Tags: they may change.
  112.         ; GET ONLY THE CHANGED TAGS, AND IF YOU NEED TO CHANGE
  113.         ; SOME TAGS IN wt_Tags, DO IT NOW, DIRECTLY, NOT CALLING
  114.         ; WILD'S SetWAppTags!
  115.         ; Example: you are a displaymodule, and need to round the width
  116.         ; of the view: do it now, call FindTagItem and change ti_Data.
  117.         ; Or use my SetTagData macro.
  118.         
  119.         movem.l    (a7)+,a2-a6        
  120.         rts
  121.         
  122.         Lib    GetModuleTags
  123.         rts
  124.         
  125.         Lib    SetUpModule        ; A0:App,A1:Tags
  126.         movem.l    a2-a6,-(a7)
  127.         movea.l    a0,a5            ; a5:WApp
  128.         movea.l    a1,a4            ; A4:Tags
  129.         movea.l    wm_WildBase(a6),a6    ; A6:WildBase
  130.         move.l    #MODB_SIZEOF,d0
  131.         AllocFastByWapp    a5,WILD
  132.         move.l    d0,wap_EngineData+we_MODULETYPE(a5)
  133.         movea.l    d0,a3            ; A3:ModData
  134.         lea.l    MODB_TrackRefresh(a3),a2
  135.         movea.l    wi_UtilityBase(a6),a6
  136.         bsr    InitTrack
  137.  
  138.         ; Here do the APPLICATION SPECIFIC INITIALIZATION!    
  139.         
  140.         movem.l    (a7)+,a2-a6                    
  141.         rts
  142.         
  143.         Lib    CloseModule        ; a0:App
  144.         movem.l    a2-a6,-(a7)
  145.         movea.l    a0,a5            ; a5:wapp
  146.         movea.l    wap_EngineData+we_MODULETYPE(a5),a3    ; a3:moddata
  147.         lea.l    MODB_TrackRefresh(a3),a2
  148.         movea.l    wm_WildBase(a6),a6
  149.         movea.l    wi_UtilityBase(a6),a6
  150.         bsr    FreeTrack
  151.  
  152.         ; Here free all for THIS APPLICATION
  153.  
  154.         move.l    a3,a1
  155.         movea.l    wap_WildBase(a5),a6
  156.         Call    FreeVecPooled                
  157.         movem.l    (a7)+,a2-a6
  158.         rts
  159.         
  160.         Lib    RefreshModule        ; A0:Wapp
  161.         movem.l    a2-a6,-(a7)
  162.         movea.l    a0,a5            ; A5:Wapp
  163.         movea.l    wm_WildBase(a6),a6
  164.         movea.l    wi_UtilityBase(a6),a6
  165.         movea.l    wap_EngineData+we_MODULETYPE(a5),a3    ; a3:moddata
  166.         lea.l    MODB_TrackRefresh(a3),a2
  167.         bsr    HaveChanges        ; A0:Changed tags.s TO FREE !!!!
  168.         movea.l    a0,a4            ; A4:Changed tags
  169.         
  170.         ; Here REFRESH UP THE MODULE, changing according to the new tags (a4, contains the FILTERED TAGLIST OF THE NEW CHANGES)
  171.         ; The value of all the tags are in wa_Tags(a5)
  172.         ; IF YOU HAVE TO GET SOME TAGS, DO IT HERE, NOT IN SetModuleTags!
  173.         ; Because, after the SetModuleTags, all other modules may change the tags
  174.         ; on the fly, before the next RefreshModule. (example, a display module may
  175.         ; need to round to 32 multiple the width, so if you get the width in 
  176.         ; SetModuleTags, you don't know if it is the definitive (rounded) width
  177.         ; of the first.)
  178.         ; DO NOT CHANGE ANY TAG IN wt_Tags HERE !!! YOU MUST DO IN SetModuleTags!!
  179.                 
  180.         movea.l    wap_WildBase(a5),a6
  181.         movea.l    wi_UtilityBase(a6),a6
  182.         movea.l    a4,a0
  183.         Call    FreeTagItems
  184.         lea.l    MODB_TrackRefresh(a3),a2
  185.         bsr    ReInitTrack
  186.         movem.l    (a7)+,a2-a6
  187.         rts
  188.             
  189.         ; Specific module funcs here!    
  190.  
  191.         Lib    END